#!/bin/bash

# WebDAV扩展打包脚本
# 功能：自动更新版本号、生成changelog、打包扩展

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印带颜色的消息
print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 获取当前版本号
get_current_version() {
    grep '"version"' manifest.json | sed 's/.*"version": "\([^"]*\)".*/\1/'
}

# 更新版本号
update_version() {
    local new_version=$1
    print_info "更新版本号从 $(get_current_version) 到 $new_version"
    
    # 备份原文件
    cp manifest.json manifest.json.bak
    
    # 更新manifest.json中的版本号
    sed -i '' "s/\"version\": \"[^\"]*\"/\"version\": \"$new_version\"/" manifest.json
    
    print_success "版本号已更新到 $new_version"
}

# 生成changelog
generate_changelog() {
    local version=$1
    local changelog_file="CHANGELOG.md"
    local date=$(date '+%Y-%m-%d')
    
    print_info "生成changelog..."
    
    # 如果changelog文件不存在，创建它
    if [ ! -f "$changelog_file" ]; then
        cat > "$changelog_file" << EOF
# Changelog

所有重要的项目变更都会记录在这个文件中。

格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)，
并且本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。

EOF
    fi
    
    # 创建临时文件
    local temp_file=$(mktemp)
    
    # 读取现有内容，在适当位置插入新版本
    awk -v version="$version" -v date="$date" '
    BEGIN { inserted = 0 }
    /^# Changelog/ {
        print $0
        getline
        print $0
        getline
        print $0
        getline
        print $0
        getline
        print $0
        print ""
        print "## [" version "] - " date
        print ""
        print "### Added"
        print "- 使用Lucide图标替换emoji图标，提升界面现代化程度"
        print "- 优化图标显示效果，支持SVG矢量图标"
        print ""
        print "### Changed"
        print "- 更新UI图标系统，提升用户体验"
        print ""
        print "### Fixed"
        print "- 修复图标在不同视图模式下的显示问题"
        print ""
        inserted = 1
        next
    }
    { print $0 }
    ' "$changelog_file" > "$temp_file"
    
    # 替换原文件
    mv "$temp_file" "$changelog_file"
    
    print_success "Changelog已更新"
}

# 创建打包目录
create_build_dir() {
    local build_dir="build"
    local dist_dir="dist"
    
    print_info "创建打包目录..."
    
    # 清理旧的构建目录
    rm -rf "$build_dir" "$dist_dir"
    mkdir -p "$build_dir" "$dist_dir"
    
    print_success "打包目录已创建"
}

# 复制文件到打包目录
copy_files() {
    local build_dir="build"
    
    print_info "复制文件到打包目录..."
    
    # 复制必要文件
    cp manifest.json "$build_dir/"
    cp popup.html "$build_dir/"
    cp background.js "$build_dir/"
    cp README.md "$build_dir/"
    cp -r css "$build_dir/"
    cp -r js "$build_dir/"
    cp -r icons "$build_dir/"
    cp -r _locales "$build_dir/"
    
    # 如果存在changelog，也复制过去
    if [ -f "CHANGELOG.md" ]; then
        cp CHANGELOG.md "$build_dir/"
    fi
    
    print_success "文件复制完成"
}

# 创建ZIP包
create_zip() {
    local version=$1
    local build_dir="build"
    local dist_dir="dist"
    local zip_name="WebDavy-v${version}.zip"
    
    print_info "创建ZIP包..."
    
    cd "$build_dir"
    zip -r "../$dist_dir/$zip_name" .
    cd ..
    
    print_success "ZIP包已创建: $dist_dir/$zip_name"
}

# 清理临时文件
cleanup() {
    print_info "清理临时文件..."
    
    # 删除备份文件
    if [ -f "manifest.json.bak" ]; then
        rm manifest.json.bak
    fi
    
    # 删除构建目录
    rm -rf build
    
    print_success "清理完成"
}

# 显示帮助信息
show_help() {
    echo "WebDAV扩展打包脚本"
    echo ""
    echo "用法: $0 [选项] [版本号]"
    echo ""
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  -c, --current  显示当前版本号"
    echo "  -n, --no-zip   只更新版本和changelog，不创建ZIP包"
    echo ""
    echo "示例:"
    echo "  $0 1.1.0              # 更新到版本1.1.0并打包"
    echo "  $0 --current           # 显示当前版本号"
    echo "  $0 -n 1.1.0           # 只更新版本号，不打包"
}

# 主函数
main() {
    local new_version=""
    local create_zip_flag=true
    
    # 解析命令行参数
    while [[ $# -gt 0 ]]; do
        case $1 in
            -h|--help)
                show_help
                exit 0
                ;;
            -c|--current)
                echo "当前版本: $(get_current_version)"
                exit 0
                ;;
            -n|--no-zip)
                create_zip_flag=false
                shift
                ;;
            -*)
                print_error "未知选项: $1"
                show_help
                exit 1
                ;;
            *)
                if [ -z "$new_version" ]; then
                    new_version=$1
                else
                    print_error "只能指定一个版本号"
                    exit 1
                fi
                shift
                ;;
        esac
    done
    
    # 如果没有指定版本号，提示用户输入
    if [ -z "$new_version" ]; then
        echo -n "请输入新版本号 (当前: $(get_current_version)): "
        read new_version
        
        if [ -z "$new_version" ]; then
            print_error "版本号不能为空"
            exit 1
        fi
    fi
    
    # 验证版本号格式（简单验证）
    if ! [[ $new_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && ! [[ $new_version =~ ^[0-9]+\.[0-9]+$ ]]; then
        print_error "版本号格式不正确，应该是 x.y.z 或 x.y 格式"
        exit 1
    fi
    
    print_info "开始打包流程..."
    print_info "目标版本: $new_version"
    
    # 执行打包流程
    update_version "$new_version"
    generate_changelog "$new_version"
    
    if [ "$create_zip_flag" = true ]; then
        create_build_dir
        copy_files
        create_zip "$new_version"
        cleanup
        
        print_success "打包完成！"
        print_info "输出文件: dist/webdav-extension-v${new_version}.zip"
    else
        print_success "版本号和changelog更新完成！"
    fi
    
    print_info "当前版本: $(get_current_version)"
}

# 检查是否在正确的目录
if [ ! -f "manifest.json" ]; then
    print_error "未找到manifest.json文件，请在项目根目录运行此脚本"
    exit 1
fi

# 运行主函数
main "$@"